bitkeeper revision 1.1327.2.15 (4270e4efrExxOueWy0PzsA_9yhB0tA)
authormjw@wray-m-3.hpl.hp.com <mjw@wray-m-3.hpl.hp.com>
Thu, 28 Apr 2005 13:28:15 +0000 (13:28 +0000)
committermjw@wray-m-3.hpl.hp.com <mjw@wray-m-3.hpl.hp.com>
Thu, 28 Apr 2005 13:28:15 +0000 (13:28 +0000)
Move blkif utility functions into xen.util.
Importing xen.xend.server.blkif from xm create caused
errors.

Signed-off-by: Mike Wray <mike.wray@hp.com>
.rootkeys
tools/python/xen/util/blkif.py [new file with mode: 0644]
tools/python/xen/xend/XendDomainInfo.py
tools/python/xen/xend/server/blkif.py
tools/python/xen/xm/create.py

index 4292fd597bb427d808bf280b58723ee470160294..f5285db3f12456b33dc6c4a77f472f3a30ef2a26 100644 (file)
--- a/.rootkeys
+++ b/.rootkeys
 40fcefb4rnaZNjqsBu7A5V2rlLyqRw tools/python/xen/sv/util.py
 40d8915cyoVA0hJxiBFNymL7YvDaRg tools/python/xen/util/Brctl.py
 40dfd40aGqGkiopOOgJxSF4iCbHM0Q tools/python/xen/util/__init__.py
+4270e4efFg3wHCCxXpA0h6yoMTkeSQ tools/python/xen/util/blkif.py
 4055ee4dwy4l0MghZosxoiu6zmhc9Q tools/python/xen/util/console_client.py
 40c9c468IienauFHQ_xJIcqnPJ8giQ tools/python/xen/util/ip.py
 41dde8b0yuJX-S79w4xJKxBQ-Mhp1A tools/python/xen/util/memmap.py
diff --git a/tools/python/xen/util/blkif.py b/tools/python/xen/util/blkif.py
new file mode 100644 (file)
index 0000000..143aa47
--- /dev/null
@@ -0,0 +1,84 @@
+import os
+import re
+import string
+
+from xen.util.ip import _readline, _readlines
+
+def expand_dev_name(name):
+    if not name:
+        return name
+    if re.match( '^/dev/', name ):
+        return name
+    else:
+        return '/dev/' + name
+
+def blkdev_name_to_number(name):
+    """Take the given textual block-device name (e.g., '/dev/sda1',
+    'hda') and return the device number used by the OS. """
+
+    n = expand_dev_name(name)
+
+    try:
+        return os.stat(n).st_rdev
+    except Exception, ex:
+        log.debug("exception looking up device number for %s: %s", name, ex)
+        pass
+
+    if re.match( '/dev/sd[a-p]([0-9]|1[0-5])', n):
+        return 8 * 256 + 16 * (ord(n[7:8]) - ord('a')) + int(n[8:])
+
+    if re.match( '/dev/hd[a-t]([1-9]|[1-5][0-9]|6[0-3])?', n):
+        ide_majors = [ 3, 22, 33, 34, 56, 57, 88, 89, 90, 91 ]
+        major = ide_majors[(ord(n[7:8]) - ord('a')) / 2]
+        minor = ((ord(n[7:8]) - ord('a')) % 2) * 64 + int(n[8:] or 0)
+        return major * 256 + minor
+
+    # see if this is a hex device number
+    if re.match( '^(0x)?[0-9a-fA-F]+$', name ):
+        return string.atoi(name,16)
+        
+    return None
+
+def blkdev_segment(name):
+    """Take the given block-device name (e.g. '/dev/sda1', 'hda')
+    and return a dictionary { device, start_sector,
+    nr_sectors, type }
+        device:       Device number of the given partition
+        start_sector: Index of first sector of the partition
+        nr_sectors:   Number of sectors comprising this partition
+        type:         'Disk' or identifying name for partition type
+    """
+    val = None
+    n = blkdev_name_to_number(name)
+    if n:
+        val = { 'device'       : n,
+                'start_sector' : long(0),
+                'nr_sectors'   : long(1L<<63),
+                'type'         : 'Disk' }
+    return val
+
+def blkdev_uname_to_file(uname):
+    """Take a blkdev uname and return the corresponding filename."""
+    fn = None
+    if uname.find(":") != -1:
+        (typ, fn) = uname.split(":")
+        if typ == "phy" and not fn.startswith("/dev/"):
+            fn = "/dev/%s" %(fn,)
+    return fn
+
+def mount_mode(name):
+    mode = None
+    name = expand_dev_name(name)
+    lines = _readlines(os.popen('mount 2>/dev/null'))
+    exp = re.compile('^' + name + ' .*[\(,]r(?P<mode>[ow])[,\)]')
+    for line in lines:
+        pm = exp.match(line)
+        if not pm: continue
+        mode = pm.group('mode')
+        break
+    if mode == 'w':
+        return mode
+    if mode == 'o':
+        mode = 'r'
+    return mode
+    
index 36d1cb887d11d30245578593444d904d0bf449e7..9351e335c185bccf5591a163874a6a1114aaffa4 100644 (file)
@@ -16,7 +16,7 @@ import xen.lowlevel.xc; xc = xen.lowlevel.xc.new()
 import xen.util.ip
 from xen.util.ip import _readline, _readlines
 from xen.xend.server import channel, controller
-from xen.xend.server.blkif import blkdev_uname_to_file
+from xen.util.blkif import blkdev_uname_to_file
 
 from server.channel import channelFactory
 import server.SrvDaemon; xend = server.SrvDaemon.instance()
index 6be499d64ef7e0a88fb8e2daac5bb5663877b648..d894b5a0e70bd52500a399dd7ca1d9d42e377401 100755 (executable)
@@ -1,11 +1,9 @@
 # Copyright (C) 2004 Mike Wray <mike.wray@hp.com>
 """Support for virtual block devices.
 """
-
-import os
-import re
 import string
 
+from xen.util import blkif
 from xen.xend.XendError import XendError, VmError
 from xen.xend import XendRoot
 from xen.xend.XendLogging import log
@@ -16,86 +14,6 @@ import channel
 from controller import CtrlMsgRcvr, Dev, DevController
 from messages import *
 
-from xen.util.ip import _readline, _readlines
-
-def expand_dev_name(name):
-    if not name:
-        return name
-    if re.match( '^/dev/', name ):
-        return name
-    else:
-        return '/dev/' + name
-
-def blkdev_name_to_number(name):
-    """Take the given textual block-device name (e.g., '/dev/sda1',
-    'hda') and return the device number used by the OS. """
-
-    n = expand_dev_name(name)
-
-    try:
-        return os.stat(n).st_rdev
-    except Exception, ex:
-        log.debug("exception looking up device number for %s: %s", name, ex)
-        pass
-
-    if re.match( '/dev/sd[a-p]([0-9]|1[0-5])', n):
-        return 8 * 256 + 16 * (ord(n[7:8]) - ord('a')) + int(n[8:])
-
-    if re.match( '/dev/hd[a-t]([1-9]|[1-5][0-9]|6[0-3])?', n):
-        ide_majors = [ 3, 22, 33, 34, 56, 57, 88, 89, 90, 91 ]
-        major = ide_majors[(ord(n[7:8]) - ord('a')) / 2]
-        minor = ((ord(n[7:8]) - ord('a')) % 2) * 64 + int(n[8:] or 0)
-        return major * 256 + minor
-
-    # see if this is a hex device number
-    if re.match( '^(0x)?[0-9a-fA-F]+$', name ):
-        return string.atoi(name,16)
-        
-    return None
-
-def blkdev_segment(name):
-    """Take the given block-device name (e.g. '/dev/sda1', 'hda')
-    and return a dictionary { device, start_sector,
-    nr_sectors, type }
-        device:       Device number of the given partition
-        start_sector: Index of first sector of the partition
-        nr_sectors:   Number of sectors comprising this partition
-        type:         'Disk' or identifying name for partition type
-    """
-    val = None
-    n = blkdev_name_to_number(name)
-    if n:
-        val = { 'device'       : n,
-                'start_sector' : long(0),
-                'nr_sectors'   : long(1L<<63),
-                'type'         : 'Disk' }
-    return val
-
-def blkdev_uname_to_file(uname):
-    """Take a blkdev uname and return the corresponding filename."""
-    fn = None
-    if uname.find(":") != -1:
-        (typ, fn) = uname.split(":")
-        if typ == "phy" and not fn.startswith("/dev/"):
-            fn = "/dev/%s" %(fn,)
-    return fn
-
-def mount_mode(name):
-    mode = None
-    name = expand_dev_name(name)
-    lines = _readlines(os.popen('mount 2>/dev/null'))
-    exp = re.compile('^' + name + ' .*[\(,]r(?P<mode>[ow])[,\)]')
-    for line in lines:
-        pm = exp.match(line)
-        if not pm: continue
-        mode = pm.group('mode')
-        break
-    if mode == 'w':
-        return mode
-    if mode == 'o':
-        mode = 'r'
-    return mode
-    
 class BlkifBackend:
     """ Handler for the 'back-end' channel to a block device driver domain
     on behalf of a front-end domain.
@@ -280,7 +198,7 @@ class BlkDev(Dev):
             raise VmError('vbd: Missing dev')
         self.mode = sxp.child_value(config, 'mode', 'r')
         
-        self.vdev = blkdev_name_to_number(self.dev)
+        self.vdev = blkif.blkdev_name_to_number(self.dev)
         if not self.vdev:
             raise VmError('vbd: Device not found: %s' % self.dev)
         
@@ -333,7 +251,7 @@ class BlkDev(Dev):
                 raise VmError("vbd: Segment %s is in read-only use" %
                               self.uname)
             
-        segment = blkdev_segment(node)
+        segment = blkif.blkdev_segment(node)
         if not segment:
             raise VmError("vbd: Segment not found: uname=%s" % self.uname)
         self.node = node
@@ -342,14 +260,14 @@ class BlkDev(Dev):
         self.nr_sectors = segment['nr_sectors']
 
     def check_mounted(self, name):
-        mode = mount_mode(name)
+        mode = blkif.mount_mode(name)
         xd = XendRoot.get_component('xen.xend.XendDomain')
         for vm in xd.domains():
             ctrl = vm.getDeviceController(self.getType(), error=False)
             if (not ctrl): continue
             for dev in ctrl.getDevices():
                 if dev is self: continue
-                if dev.type == 'phy' and name == expand_dev_name(dev.params):
+                if dev.type == 'phy' and name == blkif.expand_dev_name(dev.params):
                     mode = dev.mode
                     if 'w' in mode:
                         return 'w'
index 5b775d8d57ebbf70306bb32517bab5958fdda468..d6bad1cc62443ad3b85fd19f5ffdf8724ffb2d47 100644 (file)
@@ -11,7 +11,7 @@ from xen.xend import sxp
 from xen.xend import PrettyPrint
 from xen.xend.XendClient import server, XendError
 from xen.xend.XendBootloader import bootloader
-from xen.xend.server import blkif
+from xen.util import blkif
 
 from xen.util import console_client